home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga Plus 1995 #2
/
Amiga Plus CD - 1995 - No. 2.iso
/
pd
/
mui
/
gravisimu
/
arexx
/
planetensystem_einh.rexx
< prev
next >
Wrap
OS/2 REXX Batch file
|
1995-04-11
|
3KB
|
123 lines
/* Planetensystem_einh.rexx
*
* Autor: Thies Wellpott
* Version: 1.1 (2.7.94)
*
* Erstellt ein Planetensystem mit elliptischen Umlaufbahnen. Einzugeben
* ist der Name und die Masse des Sterns, sowie für jeden Planeten der Name,
* die Masse, die große Halbachse der Ellipse, die numerische Exzentrizität
* und die mittlere Umlaufgeschwindigkeit
*
* benötigt rexxmathlib.library
*/
G = 6.67259e-11 /* Gravitationskonstante */
PI = 3.1415927
Call Addlib("rexxmathlib.library",0,-30,0)
IF ~Show("P", "GRAVISIMU.1") THEN
DO
Say "GraviSimu ist nicht gestartet!"
Exit
END
Address "GRAVISIMU.1"
Options Results
'GetNumObjects'
IF Result > 0 THEN
Say "Achtung! Die existierenden Objekte können stören!"
Options Prompt ">> "
Say "Name des Sterns"
Parse Pull name
Say "Masse des Sterns (Kommazahl Leerzeichen Masseneinheitsabkürzung)"
Parse Pull m m_einh
'GetUnitKG' m_einh
IF RC ~= 0 THEN
DO
Say "*** Ungültige Masseneinheit!"
Exit
END
'NewObject "'name'"' m m_einh '0 0 m 0 0 m/s 1 1 0 1'
IF RC ~= 0 THEN
DO
Say '*** Konnte das Objekt "'name'" nicht anfügen!'
Exit
END /* IF */
min_T = 1e35
max_a = 0
DO i=1 UNTIL name = ""
Say
Say i". Planetenname (eine leere Eingabe beendet das Skript)"
Parse Pull name
IF name ~= "" THEN
DO
Say " Planetenmasse (Kommazahl Leerzeichen Masseneinheitsabkürzung)"
Parse Pull m m_einh
'GetUnitKG' m_einh
IF RC ~= 0 THEN
DO
Say "*** Ungültige Masseneinheit!"
Exit
END
m_kg = m * Result
Say "Daten der elliptischen Umlaufbahn"
Say " große Halbachse (Kommazahl Leerzeichen Streckeneinheitsabkürzung)"
Parse Pull a a_einh
'GetUnitM' a_einh
IF RC ~= 0 THEN
DO
Say "*** Ungültige Streckeneinheit!"
Exit
END
a_m = a * Result
Say " numerische Exzentrizität (zwischen 0.0 und 1.0)"
Parse Pull epsilon
Say " mittlere Umlaufgeschwindigkeit in km/s"
Parse Pull vm
vm_ms = vm*1000
b = a * Sqrt(1 - epsilon*epsilon)
x = epsilon*a
y = -b
vx = vm
vy = 0
T = 2*PI * a_m / vm_ms /* ungefähre Umlaufzeit in s */
IF T < min_T THEN
min_T = T
IF a_m > max_a THEN
max_a = a_m
'NewObject "'name'"' m m_einh x y a_einh vx vy 'km/s 1 0 1 1'
IF RC ~= 0 THEN
Say "*** Konnte Planeten nicht anfügen!"
END /* IF */
END /* DO UNTIL */
IF max_a = 0 THEN
Say "*** Kein Planet eingegeben!"
ELSE DO
'GetWindowSize'
Parse Var Result sx sy
'GetUnitM AE'
'SetScale' 2*max_a/Result/(Min(sx,sy)/2.25) 'AE'
'GetUnitS d'
'SetTime' min_T/Result/200 'd'
'SetParameter T=1 N=1'
'SetOptions M=0'
END
Exit